home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc International / Development / TSMTEsample⁄1.1 / Source / tsmUtl.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-14  |  6.3 KB  |  244 lines  |  [TEXT/CWIE]

  1. #ifndef __tsmUtl__    
  2. #include "tsmUtl.h"
  3. #endif
  4.  
  5. #ifndef __GESTALT__   
  6. #include "Gestalt.h"
  7. #endif
  8.  
  9. #ifndef _TEMPITER_
  10. #include "TempIter.h"
  11. #endif
  12.  
  13. #ifndef _FOCUSLIB_
  14. #include "FocusLib.h"
  15. #endif
  16.  
  17. struct PASSTR {
  18.     unsigned char len;
  19.     unsigned char ptr[];
  20. };
  21.  
  22. void tsmIdle(Environment* ev, tsmUtlRec *gGlobals)
  23. {
  24.     if(gGlobals->fTEHandle != kODNULL){
  25.         TEIdle(gGlobals->fTEHandle);
  26.     }
  27. }
  28.  
  29. void tsmDraw(Environment* ev, tsmUtlRec *gGlobals, ODFacet* facet)
  30. {
  31.     GrafPtr    saveport;
  32.     GetPort(&saveport);
  33.     
  34.     // get frame shape
  35.     ODFrame*    frame = facet->GetFrame(ev);
  36.     ODCanvas* biasCanvas = facet->GetCanvas(ev);
  37.     
  38.     GrafPtr port = biasCanvas->GetQDPort(ev);
  39.     SetPort(port);
  40.  
  41.     TempODShape frameShape = frame->AcquireFrameShape(ev, biasCanvas);
  42.     ODRgnHandle frameRgn = frameShape->GetQDRegion(ev);
  43.     Rect bounds = (**frameRgn).rgnBBox;
  44.  
  45.     PenState penState;
  46.     GetPenState(&penState);
  47.     PenNormal();
  48.     TextSize(FontSize);
  49.     TextFont(FontKind);
  50.  
  51.     PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
  52.     short align = teFlushDefault;
  53.     TETextBox(pstr->ptr, pstr->len, &bounds, align);    
  54.  
  55.     SetPenState(&penState);
  56.     SetPort(saveport);
  57. }
  58.  
  59. void tsmOpen(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame)
  60. {
  61.     GrafPtr    saveport;
  62.     GetPort(&saveport);
  63.     
  64.     // get first facet from frame.
  65.     CFrameInfo*    frameInfo = (CFrameInfo*) frame->GetPartInfo(ev);
  66.     TempODFrameFacetIterator fiter(ev, frame);
  67.     ODFacet* facet = fiter.First();
  68.     if(facet == kODNULL) return;
  69.         
  70.     // get frame shape
  71.     ODCanvas* biasCanvas = facet->GetCanvas(ev);
  72.     TempODShape frameShape = frame->AcquireFrameShape(ev, biasCanvas);
  73.     ODRgnHandle frameRgn = frameShape->GetQDRegion(ev);
  74.     Rect bounds = (**frameRgn).rgnBBox;
  75.     
  76.     GrafPtr port = biasCanvas->GetQDPort(ev);
  77.     SetPort(port);
  78.     
  79.     // get facet offset from window
  80.     ODTransform *localToGlobal = facet->AcquireContentTransform(ev, kODNULL);
  81.     ODPoint offset(0,0);
  82.     localToGlobal->TransformPoint(ev, &offset);
  83.     OffsetRect(&bounds, offset.IntX(), offset.IntY());
  84.     
  85.     PenState penState;
  86.     GetPenState(&penState);
  87.     PenNormal();
  88.     TextSize(FontSize);
  89.     TextFont(FontKind);
  90.  
  91.     if(gGlobals->fTEHandle == kODNULL){
  92.  
  93. //        DebugStr("\ptsmOpen : Called while TE is not activated");
  94. #ifdef debug
  95.         SysBeep(1);
  96. #endif
  97.         
  98.         gGlobals->fTEHandle = TENew(&bounds, &bounds);
  99.     
  100.         if (gGlobals->fHaveTSMTE == kODTrue) {
  101.             OSErr          err;
  102.             OSType         interfaceTypes[]= {kTSMTEInterfaceType};
  103.     
  104.             if(gGlobals->fHaveShareTSMlib == kODTrue)
  105.                    err = ODNewTSMDocumentForPart(1, interfaceTypes, &gGlobals->fTSMDocID, (long)&gGlobals->fTSMTEHandle);
  106.                else
  107.                 err = NewTSMDocument(1, interfaceTypes, &gGlobals->fTSMDocID, (long)&gGlobals->fTSMTEHandle);
  108.             if (err == noErr) {
  109.                 (*gGlobals->fTSMTEHandle)->textH            = gGlobals->fTEHandle;
  110.                 (*gGlobals->fTSMTEHandle)->preUpdateProc    = kODNULL;
  111.                 (*gGlobals->fTSMTEHandle)->postUpdateProc    = kODNULL;
  112.                 (*gGlobals->fTSMTEHandle)->updateFlag        = kTSMTEAutoScroll;
  113.                 (*gGlobals->fTSMTEHandle)->refCon            = kODNULL;
  114.                 UseInputWindow(kODNULL, kODFalse);
  115.             }
  116.         }
  117.     
  118.         PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
  119.         TESetText(pstr->ptr, pstr->len, gGlobals->fTEHandle);
  120. //        TESetSelect(0, 0, gGlobals->fTEHandle);
  121.         
  122.         if (gGlobals->fHaveTSMTE == kODTrue){
  123.             if(gGlobals->fHaveShareTSMlib == kODTrue){
  124.                 OSType         interfaceTypes[]= {kTSMTEInterfaceType};
  125.                 ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
  126.             }
  127.             ActivateTSMDocument(gGlobals->fTSMDocID);
  128.         }
  129.         TEActivate(gGlobals->fTEHandle);
  130.     }
  131.     else
  132.         DebugStr("\ptsmOpen : Called while TE is activated");
  133.  
  134.     TEUpdate(&bounds, gGlobals->fTEHandle);
  135.  
  136.     SetPenState(&penState);
  137.     SetPort(saveport);
  138.  
  139.     localToGlobal->Release(ev);    
  140. }
  141.  
  142. void tsmClose(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame)
  143. {
  144. #ifdef debug
  145.     SysBeep(1);
  146.     SysBeep(1);
  147. #endif
  148.  
  149.     PASSTR *pstr = (struct PASSTR*)gGlobals->fText;
  150.     Handle hd;
  151.     GrafPtr        port;
  152.  
  153.     GetPort(&port);    
  154.     if(gGlobals->fTEHandle != kODNULL){
  155. //        DebugStr("\ptsmClose : Called while TE is activated");
  156.         if (gGlobals->fHaveTSMTE == kODTrue){
  157.             if(gGlobals->fHaveShareTSMlib == kODTrue){
  158.                 OSType         interfaceTypes[]= {kTSMTEInterfaceType};            
  159.                 ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
  160.             }
  161.             DeactivateTSMDocument(gGlobals->fTSMDocID);
  162.         }
  163.         hd = TEGetText(gGlobals->fTEHandle);
  164.         pstr->len = (*gGlobals->fTEHandle)->teLength;
  165.         if(pstr->len > 255) pstr->len = 255;
  166.         if(pstr->len > 0){
  167.             HLock(hd);
  168.                  BlockMove(*hd, pstr->ptr, pstr->len);
  169.             HUnlock(hd);
  170.          }
  171.         TEDeactivate(gGlobals->fTEHandle);
  172.         if(gGlobals->fHaveTSMTE == kODTrue){
  173.             if(gGlobals->fHaveShareTSMlib == kODTrue){
  174.                 OSType         interfaceTypes[]= {kTSMTEInterfaceType};
  175.                 ODUseTSMDocumentForPart(1, interfaceTypes, gGlobals->fTSMDocID, (long)gGlobals->fTSMTEHandle);
  176.                 ODDeleteTSMDocumentForPart(gGlobals->fTSMDocID);
  177.             }
  178.             else
  179.                 DeleteTSMDocument(gGlobals->fTSMDocID);
  180.         }
  181.         TEDispose(gGlobals->fTEHandle);
  182.         gGlobals->fTEHandle = kODNULL;
  183.     }
  184. //    else
  185. //        DebugStr("\ptsmClose : Called while TE is not activated");
  186.     SetPort(port);
  187. }
  188.  
  189. void tsmKey(Environment* ev, tsmUtlRec *gGlobals, ODFrame* frame, ODEventData* event)
  190. {
  191.     GrafPtr        port;
  192.  
  193.     GetPort(&port);    
  194.     if(gGlobals->fTEHandle != kODNULL){
  195.          // Just private scrap support by CmdKey.
  196.          // You must support ExternalScrap, EditMenu, AjustMenu, Storage, Drag&Drop...
  197.         if(event->modifiers & cmdKey){
  198.             switch(event->message & charCodeMask){
  199.                 case 'c':    TECopy(gGlobals->fTEHandle);    break;
  200.                 case 'x':    TECut(gGlobals->fTEHandle);    break;
  201.                 case 'v':    TEPaste(gGlobals->fTEHandle);    break;
  202.                 default: break;
  203.             }
  204.         }
  205.         else
  206.             TEKey(event->message & charCodeMask, gGlobals->fTEHandle);
  207.     }
  208.     else
  209.         DebugStr("\ptsmKey : Got key while TE is not activated");
  210.     SetPort(port);
  211. }
  212.  
  213. void tsmCheck(tsmUtlRec *gGlobals)
  214. {
  215.     long    result;
  216.     if (::Gestalt(kTSMTESignature, &result) == noErr 
  217.         && (result & (1 << gestaltTSMTE)) != 0){
  218.         if ((Ptr)ODUseTSMDocumentForPart == (Ptr)nil){
  219.             gGlobals->fHaveShareTSMlib = kODFalse;
  220.         }
  221.         else{
  222.             gGlobals->fHaveShareTSMlib = kODTrue;
  223.         }
  224.         gGlobals->fHaveTSMTE = kODTrue;
  225.     }
  226.     else{
  227.         gGlobals->fHaveTSMTE = kODFalse;
  228.     }
  229. }
  230.  
  231. void tsmClick(Environment* ev, tsmUtlRec *gGlobals,  ODFacet* facet, Point *where, ODEventData* event)
  232. {
  233.     GrafPtr        port;
  234.  
  235.     GetPort(&port);    
  236.     if(gGlobals->fTEHandle != kODNULL){
  237.         TEClick(*where, (event->modifiers & shiftKey) != 0 ? true : false, gGlobals->fTEHandle);
  238.     }
  239. //    else
  240. //        DebugStr("\ptsmClick : Called while TE is not activated");
  241.  
  242.     SetPort(port);
  243. }
  244.